Skip to content

feat(WhereUI): welcome users to their live region - #309

Merged
kyleve merged 7 commits into
mainfrom
codex/welcome-live-region
Sep 7, 2026
Merged

feat(WhereUI): welcome users to their live region#309
kyleve merged 7 commits into
mainfrom
codex/welcome-live-region

Conversation

@kyleve

@kyleve kyleve commented Sep 6, 2026

Copy link
Copy Markdown
Owner

Posted by an AI agent on kve's behalf.

Summary

  • User-facing: Show a playful, passport-inspired welcome over Locations when the live tracked region differs from the last dismissed region.
  • User-facing: Use first-visit and return-visit copy, a dedicated close control, a dimmed modal backdrop, bouncy motion, and a reduced-motion fallback.
  • User-facing: Present the message on 92%-opaque, stroke-free paper with leading-aligned copy, the region silhouette as a background watermark and repeated perimeter microprint, restrained card depth, and a raised glass close control.
  • User-facing: Offer an “I’ll be here through…” endorsement that opens the existing planned-stay editor for the live region when Estimated Time & Planning is enabled.
  • User-facing: Add a default-On “Region welcome cards” switch under Appearance so the welcome can be disabled independently.
  • Internal: Resolve the region only while recording and welcome presentation are authorized, recheck both after the suspended location request, and persist the last dismissed region.
  • Internal: Announce both custom modal boundaries to VoiceOver and keep large Dynamic Type content scrollable without truncation.

Why

The Locations tab did not acknowledge when Where began counting recorded days toward the user's current region. The new card makes that transition visible and provides a direct path to planning the rest of the stay without creating a second planning workflow. The Appearance switch keeps that acknowledgement optional.

Review focus

  • The live-region resolver checks recording authority before and after location acquisition so revoked consent cannot publish a late welcome.
  • The welcome model likewise checks the Appearance preference before and after location acquisition, so disabling it cannot publish a late card.
  • Dismissal is the only acknowledgement point. Returning to a previously dismissed region after another region produces the return greeting; hiding the feature does not mark a region as welcomed.
  • The overlay posts VoiceOver screen-change notifications when it enters and leaves.
  • The paper layer sits above a clear glass substrate so underlying cards do not bleed through. Solid card and close-control outlines remain omitted; the inset perimeter reuses the location cards' repeated micro-fidelity region silhouettes.
  • The stay endorsement reuses PlannedStayEditor, remains absent when planning is disabled, and waits for the welcome exit animation before presenting the sheet.

Testing

  • ./test WhereCoreTests WhereUITests --no-generate — 1,085 tests passed.
  • ./test --only 'WhereCoreTests/WherePreferencesTests' --only 'WhereUITests/YearReportModelTests' --only 'WhereUITests/LocationWelcomeModelTests' --only 'WhereUITests/SettingsSearchTests' --no-generate — 55 tests passed.
  • ./test --snapshots --only 'WhereUISnapshotTests/AppearanceSettingsViewSnapshotTests' --only 'WhereUISnapshotTests/LocationsViewSnapshotTests' --record never --review --no-build --no-generate --skip-architecture — 2 tests passed; all changed references were visually reviewed across light, dark, increased-contrast, VoiceOver-annotation, and large Dynamic Type variants.
  • ./swiftformat --lint
  • ./sf-symbols --lint
  • ./xcstrings --lint
  • git diff --check

Comment thread Where/WhereUI/Sources/Primary/LocationsView.swift
@kyleve
kyleve merged commit e3c0da1 into main Sep 7, 2026
7 checks passed
kyleve added a commit that referenced this pull request Sep 7, 2026
> _Posted by an AI agent on kve's behalf._

## Summary

- Reconcile all 12 area backlogs with source through PR #311
(`5f65b9f0`), including PR #309 that the previous report's stated source
coverage missed. The inbox is empty.
- Archive three entries: shipped logged-in/out scope modeling, shipped
local ingest/manual-sample fan-out, and the corrected WhereCore
documentation cluster. Keep the summary, picker, and other partially
implemented work open.
- File two welcome follow-ups: foreground lookup refresh and
scrolling/modal snapshot coverage. Narrow the current-location marker
request to what remains after the welcome feature.
- Correct overstated failure claims, moved citations, test/reference
counts, and snapshot backlog formatting. Document actual reconciliation
and snapshot-model-sharing limitations.
- Refresh `MODULE_AUDIT.md` with the commit boundary, module checks, and
a derived inventory: 709 source files, 371 test/support files, 49
image-suite files, 495 references, and 25 test bundles.

## Review focus

- The welcome foreground finding follows from the retained view's
unchanged task key; its entry explicitly calls for a device reproduction
before choosing the final trigger. No runtime fix is claimed here.
- Snapshot model sharing remains open even though its misleading
documentation is corrected. Priorities are preserved.
- The September 9 benchmark-plan downgrade remains a saved deadline, not
freshly verified billing state. The benchmark repository still exists
and is not archived.

## Verification

- `./swiftformat --lint` — passed; 0/1,136 files require formatting, 125
skipped. The sandbox initially prevented writing the optional formatter
cache; lint itself passed.
- `./shellcheck` — passed.
- `./attribution --check` — passed; 12 credits current.
- `./snapshot-shards check` — passed; 49 suites assigned 13/15/18 plus 3
intake.
- `./sync-agents` — passed after instruction changes; generated files
remain ignored.
- `git diff --check` — passed. Both Swift diffs contain comments only.
- `./test`, architecture execution, simulator/image suites, and retained
Python/Ruby suites were skipped: this change contains Markdown and
comments only, with no executable, reference-image, matrix, or
rendered-copy changes. No fresh visual or live-motion validation is
claimed. The automation's Linux/static-analysis limitations are
preserved; this run used macOS host checks.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant